<?php
namespace Admin\Model;

use Admin\Model\BaseModel;

class AskArticleModel extends BaseModel{
    protected $_validate = array(
        //array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
    	array('ask_category_id', 'checkId', '请选择分类', self::MUST_VALIDATE, 'callback', self::MODEL_BOTH),
    	array('ask_article_title', 'require', '请输入文章标题', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
    	array('ask_article_title', 'checkName', '文章标题已经存在', self::MUST_VALIDATE, 'callback', self::MODEL_BOTH),
    	array('ask_article_title', '1,50', '文章分类不能超过50个字符', self::MUST_VALIDATE, 'length', self::MODEL_BOTH),
    	array('ask_article_content', 'require', '请输入文章内容', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
    	array('sort', 'number', '排序必须是数字', self::MUST_VALIDATE, '', self::MODEL_BOTH),
    );
    
    protected $_auto = array(
        //array(完成字段1,完成规则,[完成条件,附加规则]),
    	array('create_time', NOW_TIME, self::MODEL_INSERT),
    	array('update_time', NOW_TIME, self::MODEL_UPDATE),
    );
    
    /**
     * @todo 判断值
     * @param  string $id
     * @return boolean     ture - id成立，false - id无效
     */
    protected function checkId($id){
    	if($id == 0 || $id == ''){
    		return false;
    	}else{
    		return true;
    	}
    }
    
    /**
     * @todo 检测名称是否存在
     * @param  string   $ask_article_title 文章分类名称
     * @return boolean     ture - 未重名，false - 已重名
     * @author Cruise <jiangyu@hrbjjhh.com>
     */
    protected function checkName($ask_article_title){
    	$ask_article_id = (int)I('ask_article_id');
    	if($ask_article_id > 0){
    		$map['ask_article_id'] = array('neq',$ask_article_id);
    	}
    	$map['ask_article_title'] = $ask_article_title;
    	$map['status'] = array('gt',-1);
    	if ($this->where($map)->field('ask_article_id')->find()){
    		return false;
    	}
    	return true;
    }
    
    /**
     * @todo 取出一级文章分类
     * @return array
     * @author Cruise <jiangyu@hrbjjhh.com>
     */
    public function firstCategoryShow(){
    	//获取数据
    	$map['ask_category_pid'] = 0;
    	$map['status'] = 1;
    	$first_ask_gategory = M('AskCategory')->where($map)->field('ask_category_id,ask_category_name')->select();
    	if(empty($first_ask_gategory)){
    		return array();  //没有数据返回空数组
    	}
    	return $first_ask_gategory;
    }
    
    /**
     * @todo 取出一级文章分类下的二级
     * @param int $id 查询父类id
     * @return array
     * @author Cruise <jiangyu@hrbjjhh.com>
     */
    public function getTwoCategoryShow($id){
    	//获取数据
    	$id = (int)$id;
    	if($id == 0){
    		$this->error = '参数有误';
    	}
    	$map['ask_category_pid'] = $id;
    	$map['status'] = 1;
    	$two_ask_gategory = M('AskCategory')->where($map)->field('ask_category_id,ask_category_name')->select();
    	if(empty($two_ask_gategory)){
    		return array();  //没有数据返回空数组
    	}
    	return $two_ask_gategory;
    }
    
    /**
     * update方法
     */
    public function update(){
    	/* 获取数据对象 */
    	$_POST['position'] = $this->getPosition();
    	$data = $this->create($_POST);
    	if(empty($data)){
    		$this->error =$this->getError();
    		return false;
    	}
    	/* 添加或新增活动配置 */
    	if(empty($data[$this->getPk()])){ //新增数据
    		$id = $this->add(); //添加活动配置
    		if(!$id){
    			$this->error = '新增出错！';
    			return false;
    		}
    	} else { //更新数据
    		$id = $this->save(); //更新活动配置
    		if(false === $id){
    			$this->error = '更新出错！';
    			return false;
    		}
    	}
    	return $id;
    }
    
    /**
     * 生成推荐位的值
     * @return number 推荐位
     * @author PHP@妖孽 <dino_ma@163.com>
     */
    protected function getPosition(){
    	$position = I('post.position');
    	if(!is_array($position)){
    		return 0;
    	}else{
    		$pos = 0;
    		foreach ($position as $key=>$value){
    			$pos += $value;		//将各个推荐位的值相加
    		}
    		return $pos;
    	}
    }
    
    /**
     * 设置where查询条件
     * @param  number  $pos      推荐位 1天天特卖推荐 2 暂留 4 暂存
     * @return array             查询条件
     * @author Cruise <jiangyu@hrbjjhh.com>
     */
    public function listMap( $pos = null){
    	/* 设置推荐位 */
    	if(is_numeric($pos)){
    		$map[] = "position & {$pos} = {$pos}";
    	}
    
    	return $map;
    }
    
    /**
     * @todo 返回主键
     * @see \Think\Model::getPk()
     */
    public function getPk(){
        return 'ask_article_id';
    }
    
    /**
     * @todo 返回最后一次错误信息
     * @return string
     * @author Cruise <jiangyu@hrbjjhh.com>
     */
    public function getError(){
    	return $this->error;
    }
    
}